/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * FrmSmartCard.java
 *
 * Created on 18/06/2011, 10:52:56
 */
package com.pedagio.view;

import com.pedagio.dominio.Dispositivo;
import com.pedagio.dominio.SmartCard;
import com.pedagio.modelo.DispositvoModelo;
import com.pedagio.negocio.DispositivoService;
import com.pedagio.util.Controle;
import java.awt.Color;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import javax.swing.JOptionPane;

/**
 *
 * @author pedroo
 */
public class FrmSmartCard extends javax.swing.JDialog {

    private DispositivoService dispositivoService = Controle.getDispositivoService();
    
    /** Creates new form FrmSmartCard */
    public FrmSmartCard(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        lblAviso.setText("");
        popularTabela();
    }
    
    private void popularTabela() {
        
        DispositvoModelo dispositivoModelo = new DispositvoModelo(false);
        tblSmartCard.setModel(dispositivoModelo); 
        
        List<Dispositivo> dispositivos = dispositivoService.findAll();
        for (Dispositivo veiculo : dispositivos) {
           dispositivoModelo.addRow(veiculo);
        }
    }

    public boolean validar() {
        
        if(textCodigo.getText().isEmpty()) {
            lblAviso.setText("O campo código deve ser preenchido");
            return false;
        }
        if(textValidade.getText().isEmpty()) {
            lblAviso.setText("O campo Data validade deve ser preenchido");
            return false;
        }
        if(textSaldo.getText().isEmpty()) {
            lblAviso.setText("O campo saldo deve ser preenchido.");
            return false;
        }
        
        return true;
    }
    
    public void limpar() {
        textSaldo.setText("");
        textValidade.setText("");
        textCodigo.setText("");
        
    }
    
    public void salvar() throws ParseException {
        if(!validar()) {
            return;
        }
        
        SmartCard smartCard = new SmartCard();
        smartCard.setBloqueado(false);
        smartCard.setCodigo(textCodigo.getText());
        smartCard.setDataCompra(new Date());
        smartCard.setSaldo(Double.parseDouble(textSaldo.getText()));
        DateFormat date = new SimpleDateFormat("dd/MM/yyyy");
        Date validade = date.parse(textValidade.getText());
        smartCard.setDataValidade(validade);
        
        dispositivoService.persist(smartCard);
        lblAviso.setText("Salvo com sucesso!");
        lblAviso.setForeground(Color.BLUE); //colore o texto do aviso de Azul
        
        popularTabela();
        
    }
    
    public void excluir() {

         int selectedRows[] = tblSmartCard.getSelectedRows();

        int size = selectedRows.length;

        if(size <= 0) {
            lblAviso.setText("Não há Smart Cards selecionados.");
            lblAviso.setForeground(Color.yellow);
            return;
        }

        for (int i = size - 1; i >= 0; i--) {
            int row =  selectedRows[i];
            String usuarioId = (String) tblSmartCard.getValueAt(row, 0);
            dispositivoService.delete(Long.parseLong(usuarioId));
            lblAviso.setText("Smart Card(s) excluído(s) com sucesso.");
            lblAviso.setForeground(Color.BLUE);
        }

        popularTabela();

        /**
         * Não sei direito o que estava acontecendo,
         * mas um erro que antes dava era na hora de no Cast (ArrayList) o metodos asList retorna um tipo List e não ArrayList
         *
         * Outro problema eh que estava-se pegando o indice 0 da tabela que antes era a descrição e não o codigo, e estava se
         * tentando excluir o item com base na descrição, quando o correto eh excluir pelo codigo ou pelo proprio objeto
         * Mudei o DispositivoModelo para colocar no indice 0 da tabela o código aih fica mais facil pra excluir pelo código.
         * 
         *
         * Mudei a iteração pra fazer o for apenas para os selecionados e não para todos os itens da tabela,
         * do jeito acima funciona.
         *
         * O de baixo não funciona, mas não sei pq
         *
         */


        /*lblAviso.setText("Smart Card(s) excluído(s) com sucesso.");
        lblAviso.setForeground(Color.CYAN);

        int[] selecionados = tblSmartCard.getSelectedRows();
        List cardList = Arrays.asList(selecionados);

        if (cardList.isEmpty()) {
            // nada selecionado
            return;
        } else {
            for (int i = 0; i < tblSmartCard.getRowCount(); i++) {
                if (cardList.contains(i)) {
                    String selectedCard = (String) tblSmartCard.getValueAt(i, 0);
                    Dispositivo excluido = dispositivoService.find(Long.parseLong(selectedCard));
                    dispositivoService.delete(excluido);
                }
            }
            lblAviso.setText("Excluido com sucesso!");
        }*/
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel4 = new javax.swing.JLabel();
        jPanel1 = new javax.swing.JPanel();
        lblAviso = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        textCodigo = new javax.swing.JTextField();
        btnSalvar = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        tblSmartCard = new javax.swing.JTable();
        jLabel2 = new javax.swing.JLabel();
        textSaldo = new javax.swing.JTextField();
        btnExcluir = new javax.swing.JButton();
        textValidade = new javax.swing.JFormattedTextField();

        jLabel4.setText("jLabel4");

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jPanel1.setBackground(new java.awt.Color(242, 247, 247));

        lblAviso.setText("Avisos");

        jLabel1.setText("Código: ");

        jLabel3.setText("Data Validade:");

        btnSalvar.setText("Salvar");
        btnSalvar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSalvarActionPerformed(evt);
            }
        });

        tblSmartCard.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {

            }
        ));
        jScrollPane1.setViewportView(tblSmartCard);

        jLabel2.setText("Saldo:");

        btnExcluir.setIcon(new javax.swing.ImageIcon(getClass().getResource("/btnExcluir.png"))); // NOI18N
        btnExcluir.setText("Excluir Selecionados");
        btnExcluir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnExcluirActionPerformed(evt);
            }
        });

        textValidade.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.DateFormatter()));

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addContainerGap()
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jLabel3)
                            .addComponent(jLabel1)
                            .addComponent(jLabel2))
                        .addGap(18, 18, 18)
                        .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(textSaldo, javax.swing.GroupLayout.DEFAULT_SIZE, 396, Short.MAX_VALUE)
                            .addComponent(textCodigo, javax.swing.GroupLayout.DEFAULT_SIZE, 396, Short.MAX_VALUE)
                            .addComponent(textValidade, javax.swing.GroupLayout.DEFAULT_SIZE, 396, Short.MAX_VALUE)))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGap(10, 10, 10)
                        .addComponent(btnExcluir))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(lblAviso, javax.swing.GroupLayout.DEFAULT_SIZE, 484, Short.MAX_VALUE))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(btnSalvar, javax.swing.GroupLayout.DEFAULT_SIZE, 484, Short.MAX_VALUE))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 484, Short.MAX_VALUE)))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(lblAviso)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(textCodigo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(9, 9, 9)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(textSaldo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel3)
                    .addComponent(textValidade, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(btnSalvar)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 172, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(btnExcluir)
                .addContainerGap())
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSalvarActionPerformed
        try {
            salvar();
        } catch (Exception e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "Erro ao tentar salvar!");
        }
    }//GEN-LAST:event_btnSalvarActionPerformed

    private void btnExcluirActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnExcluirActionPerformed
        try {
            // faz deleção do usuario
            excluir();
        } catch (Exception e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null, "Erro ao tentar salvar!");
        }
    }//GEN-LAST:event_btnExcluirActionPerformed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                FrmSmartCard dialog = new FrmSmartCard(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {

                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnExcluir;
    private javax.swing.JButton btnSalvar;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lblAviso;
    private javax.swing.JTable tblSmartCard;
    private javax.swing.JTextField textCodigo;
    private javax.swing.JTextField textSaldo;
    private javax.swing.JFormattedTextField textValidade;
    // End of variables declaration//GEN-END:variables
}
